package com.wlz.jvm;

/**
 *  类加载 全过程
 *
 *     当使用java 命令 执行某个类的 main 方法启动程序时， 首先需要通过类加载器把主类加载到jvm 中去
 *
 *     执行代码大致流程如下：
 *
 *      1. windows 系统下java.exe 调用底层的jvm.dll 文件创建java虚拟机（c++实现）
 *      2. 创建一个引导类加载器实例（c++实现）
 *
 *      3. c++ 代码调用java 代码 创建jvm启动器（sun.misc.Launcher）,该类由引导类加载器(sun.misc.Launcher.getLauncher())负责加载创建其他类加载器（扩展类夹杂、应用类加载器，自定义加载器等）
 *
 *      4. 通过 getLauncher() 获取运行类自己的类加载器Classloader (AppClassloader) 的实例
 *
 *      5. 调用 Classloader 的 loadClass 加载 Math 类
 *
 *      6. c++ 发起调用 执行 Math 类的 main 方法 ，执行程序
 *
 *      7. 程序运行结束
 *
 *      8. 程序销毁
 *
 * classload 类加载的过程：
 *
 *      加载》验证》准备》解析》初始化
 *
 */
public class Math {

    public static final int initData = 666;
    public static User user = new User();


    public int compute() { //一个方法对应一块栈帧内存区域
        int a = 1;
        int b = 2;
        int c = (a + b) * 10;
        return c;
    }

    public static void main(String[] args) {
        Math math = new Math();
        math.compute();
    }

}
